package cn.biplam.front.htmlscript.script;

import java.util.Map;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;


/**
 * ajx通讯脚本模版
 * @author WangSong 2009-6-2上午10:37:03
 * @version 1.0
 */
public class AjxScript{

	private static final String rIdName=".rid";

	/**
	 * 是否刷新父页面
	 */
	public enum Is_RefreshParent{
		/**完整刷新 */
		Refresh("1"),
		/**脚本刷新 */
		NoRefresh("0");

		private String value;
		private Is_RefreshParent(String value){this.value=value;}
		public String toString() {return value;}
	}
	/**1:提交隐藏rid 0:提交附加参数*/
	public enum Is_AddParam{
		/**提交附加参数 */
		Add("0"),
		/**提交rid */
		NoAdd("1");

		private String value;
		private Is_AddParam(String value){this.value=value;}
		public String toString() {return value;}
	}

	/**是否提交数据 */
	public enum Is_SubMitData{
		/**提交数据(input和textarea全部提交) */
		Submit("1"),
		/**提交数据(只提交input，不提交textarea) */
		SubmitInput("2"),
		/**不提交 */
		NoSubmit("0");

		private String value;
		private Is_SubMitData(String value){this.value=value;}
		public String toString() {return value;}
	}

	/**
	 * 数据提交类型 
	 */
	public enum Submit_Type{
		/**提交数据(input和textarea全部提交) */
		SubmitAll("1"),
		/**提交数据(只提交input，不提交textarea) */
		SubmitInput("2");

		private String value;
		private Submit_Type(String value){this.value=value;}
		public String toString() {return value;}
	}

	/**
	 * 弹出窗口的级别
	 */
	public enum Level{
		First("1"),
		Second("2"),
		Third("3"),
		Fourth("4"),
		Fifth("5"),
		Sixth("6"),
		Seventh("7");
		private String value;
		private Level(String value){this.value=value;}
		public Level getValue(String comp)
		{
			for(Level s:values()){
				if(s.toString().equals(comp)){
					return s;
				}
			}
			return null;
		}
		public String toString() {return value;}
	}

	/**
	 * Ajx通信动作类型
	 */
	public enum Ajx_Type{
		A,
		R,
		M,
		P,
		PR,
		SP,
		PV,
		PA;
	}

	/**
	 * 获取窗口级别
	 * @param level 字符级别
	 * @return
	 */
	public static Level getLevel(String level){
		if(Level.First.toString().equals(level)){
			return Level.First;
		}else if(Level.Second.toString().equals(level)){
			return Level.Second;
		}else if(Level.Third.toString().equals(level)){
			return Level.Third;
		}else if(Level.Fourth.toString().equals(level)){
			return Level.Fourth;
		}else if(Level.Fifth.toString().equals(level)){
			return Level.Fifth;
		}else if(Level.Sixth.toString().equals(level)){
			return Level.Sixth;
		}else if(Level.Seventh.toString().equals(level)){
			return Level.Seventh;
		}else{
			return null;
		}
	}

	/**
	 * 弹出窗口的级别
	 */
	public enum Popup_Name{
		First("syspop1"),
		Second("syspop2"),
		Third("syspop3"),
		Fourth("syspop4"),
		Fifth("syspop5"),
		Sixth("syspop6"),
		Seventh("syspop7");
		private String value;
		private Popup_Name(String value){this.value=value;}
		public String toString() {return value;}
	}



	/*********************Popup弹出p脚本模板***************************/	
	/**
	 * Popup弹出的数据提交
	 * @param sCID  容器id
	 * @param sActID  行为id  
	 * @param sLevel  弹出级别
	 * @param sFlag   是否提交数据 1:提交  0:不提交
	 * @return	String
	 */
	public static String getP(String sCID,String sActID,Level sLevel,Is_SubMitData submit){
		return getP(sCID,sActID,sLevel,submit,"");
	}

	/**
	 * Popup弹出的数据提交,在显示弹出窗口标题
	 * @param sCID  容器id
	 * @param sActID  行为id  
	 * @param sLevel  弹出级别
	 * @param submit   是否提交数据 1:提交  0:不提交
	 * @param sTitle   弹出窗口标题
	 * @return	String
	 */
	public static String getP(String sCID,String sActID,Level sLevel,Is_SubMitData submit,String sTitle){
		StringBuilder sp = new StringBuilder();
		sp.append("p('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sLevel.toString());
		sp.append("','");
		sp.append(submit.toString());
		sp.append("');");
		sp.append("$('syspop"+sLevel.toString()+"ft').innerText='"+sTitle+"';");
		return sp.toString();
	}


	/*********************Prompt弹出pr脚本模板***************************/		
	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @return	String
	 */
	public static String getPr(String sCID,String sActID,Is_SubMitData sFlag){
		return getPr(sCID, sActID, sFlag,null);
	}

	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @param sOtherContainer 其他需要提交数据的容器
	 * @return	String
	 */
	public static String getPr(String sCID,String sActID,Is_SubMitData sFlag,String sOtherContainer){
		StringBuilder sp = new StringBuilder();
		sp.append("pr('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sFlag.toString());
		if(sOtherContainer!=null){
			sp.append("','");
			sp.append(sOtherContainer);
		}
		sp.append("');");
		return sp.toString();
	}

	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @param sOtherContainer 其他需要提交数据的容器
	 * @return	String
	 */
	public static String getPv(String sCID,String sActID,Is_SubMitData sFlag,String sOtherContainer){
		return getPv(sCID, sActID, sFlag, false, sOtherContainer);
	}

	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @param mouseFollow 是否鼠标跟随 true:鼠标跟随方式 false:居中方式
	 * @param sOtherContainer 其他需要提交数据的容器
	 * @return	String
	 */
	public static String getPv(String sCID,String sActID,Is_SubMitData sFlag,boolean mouseFollow,String sOtherContainer){
		StringBuilder sp = new StringBuilder();
		sp.append("pv('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sFlag.toString());
		sp.append("',");
		sp.append(mouseFollow);
		if(sOtherContainer!=null){
			sp.append(",'");
			sp.append(sOtherContainer);
			sp.append("'");
		}
		sp.append(");");
		return sp.toString();
	}

	/**
	 * 取弹出菜单脚本
	 * @param cId 提交的容器id
	 * @param aId 行为id
	 * @param sOtherContainer 其他容器id
	 * @return 弹出菜单脚本
	 */
	public static String getPm(String cId,String aId,String sOtherContainer){
		return AjxScript.getPm(cId, aId, Is_SubMitData.Submit, true, sOtherContainer);
	}

	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @param sOtherContainer 其他需要提交数据的容器
	 * @return	String
	 */
	public static String getPm(String sCID,String sActID,Is_SubMitData sFlag,String sOtherContainer){
		return getPm(sCID, sActID, sFlag, false, sOtherContainer);
	}

	/**
	 * Prompt弹出的数据提交/同步 
	 * @param sCID   容器ID
	 * @param sActID 行为ID 
	 * @param sFlag  是否提交数据
	 * @param mouseFollow 是否鼠标跟随 true:鼠标跟随方式 false:居中方式
	 * @param sOtherContainer 其他需要提交数据的容器
	 * @return	String
	 */
	public static String getPm(String sCID,String sActID,Is_SubMitData sFlag,boolean mouseFollow,String sOtherContainer){
		StringBuilder sp = new StringBuilder();
		sp.append("pm('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sFlag.toString());
		sp.append("',");
		sp.append(mouseFollow);
		if(sOtherContainer!=null){
			sp.append(",'");
			sp.append(sOtherContainer);
			sp.append("'");
		}
		sp.append(");");
		return sp.toString();
	}

	/**
	 * PopFloat弹出的数据提交,在显示弹出窗口标题
	 * @param sCID  		容器id
	 * @param sActID  		行为id  
	 * @param sRid 			数据主键id
	 * @param followCid 	跟随的容器id,以此容器左上角为坐标
	 * @return	String
	 */
	public static String getPf(String sCID,String sActID,String sRid,String followCid){
		StringBuilder sp = new StringBuilder();
		sp.append("pf('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sRid);
		sp.append("','");
		sp.append(followCid);
		sp.append("');");
		return sp.toString();
	}


	/*********************Sp提交脚本模板***************************/	

	/**
	 * 提交数据，且提交其他参数容器,返回为脚本刷新<BR>
	 * 提交容器中需要有隐藏的rid对象
	 * @param cId  				数据提交的容器id
	 * @param aId  				提交到的ActionID
	 * @param otherContainer	需要提交的其他容器ID
	 * @return	String
	 */
	public static String getSpOther(String cId,String aId,String otherContainer){
		//不刷新父页面容器=不需要提交pid,刷新方式=NoRefresh
		//提交数据是从cid中提交input,不需要附加参数
		StringBuilder sb = new StringBuilder();
		sb.append("sp('");
		sb.append(cId);
		sb.append("','");
		sb.append(aId);
		sb.append("','");
		sb.append("','");
		sb.append(Is_RefreshParent.NoRefresh.toString());
		sb.append("','");
		sb.append(Is_AddParam.NoAdd.toString());
		sb.append("'");
		sb.append(",'");
		sb.append(otherContainer);
		sb.append("'");
		sb.append(");");

		return sb.toString();
	}

	/**
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中需要有隐藏的rid对象
	 * @param cId  数据提交的容器id
	 * @param aId  提交到的ActionID
	 * @return	String
	 */
	public static String getSpNoRefresh(String cId,String aId){
		//不刷新父页面容器=不需要提交pid,刷新方式=NoRefresh
		//提交数据是从cid中提交input,不需要附加参数
		return getSp(cId,					//cID
				aId,						//aID
				"",							//pID
				Is_RefreshParent.NoRefresh,	//返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
				Is_AddParam.NoAdd			//提交方式 NoAdd:提交rid/Add:提交附加参数
		);			
	}

	/**
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId			数据提交的容器id
	 * @param aId			提交到的ActionID
	 * @param recordID		数据主键id
	 * @return 仅提交数据，且提交返回为脚本刷新
	 */
	public static String getSpNoRefresh(String cId,String aId,String recordID){
		return getSp(cId,					//cID
				aId,						//aID
				"",							//pID
				Is_RefreshParent.NoRefresh,	//返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
				Is_AddParam.Add,			//提交方式 NoAdd:提交rid/Add:提交附加参数
				rIdName+","+recordID		//用拼接的附加参数提交rid
		);			
	}

	/**
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId			数据提交的容器id
	 * @param aId			提交到的ActionID
	 * @param recordID		数据主键id
	 * @param pId           调用者容器ID
	 * @return 仅提交数据，且提交返回为脚本刷新
	 */
	public static String getSpNoRefresh(String cId,String aId,String recordID,String pId){
		return getSp(cId,					//cID
				aId,						//aID
				pId==null?"":pId,			//pID
						Is_RefreshParent.NoRefresh,	//返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
						Is_AddParam.Add,			//提交方式 NoAdd:提交rid/Add:提交附加参数
						rIdName+","+recordID		//用拼接的附加参数提交rid
		);			
	}

	/**
	 * 刷新父容器的SP<BR>
	 * 提交返回的内容将替换父容器内容(即:返回的是父容器的完整html)<BR>
	 * 提交容器中需要有隐藏的rid对象
	 * @param cId   数据提交的容器id
	 * @param aId   提交到的ActionID
	 * @param pId    父容器ID(即TargetID)
	 * @return	String
	 */
	public static String getSp(String cId,String aId,String pId){
		return getSp(cId,					//cID
				aId,						//aID
				pId,						//pID
				Is_RefreshParent.Refresh,	//返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
				Is_AddParam.NoAdd			//提交方式 NoAdd:提交rid/Add:提交附加参数
		);			
	}


	/**
	 * 刷新父容器的SP<BR>
	 * 提交返回的内容将替换父容器内容(即:返回的是父容器的完整html)<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId   数据提交的容器id
	 * @param aId   提交到的ActionID
	 * @param pId    父容器ID(即TargetID)
	 * @param recordID	数据主键id
	 * @return String
	 */
	public static String getSp(String cId,String aId,String pId,String recordID){
		return getSp(cId,					//cID
				aId,						//aID
				pId,						//pID
				Is_RefreshParent.Refresh,	//返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
				Is_AddParam.Add,			//提交方式 NoAdd:提交rid/Add:提交附加参数
				rIdName+","+recordID		//用拼接的附加参数提交rid
		);			
	}

	/**
	 * 弹出窗口内的数据提交/同步
	 * @param sCid   数据提交的容器id
	 * @param sAid   提交到的ActionID
	 * @param pid    父容器ID(前一个页面的提交容器ID)
	 * @param flag   是否刷新父容器 0:不刷新 1:刷新
	 * @param addType 提交方式 1(Add):提交rid，0(NoAdd):提交附加参数 并把函数的多余参数增加到param中
	 * @param otherParam:	附加参数:可附加多个参数,每个参数是一个键值对,逗号分隔，如：rid,1001
	 */
	private static String getSp(String sCid,String sAid,String pid,Is_RefreshParent flag,Is_AddParam addType,String ... otherParam){
		StringBuilder sb = new StringBuilder();
		sb.append("sp('");
		sb.append(sCid);
		sb.append("','");
		sb.append(sAid);
		sb.append("','");
		sb.append(pid);
		sb.append("','");
		sb.append(flag.toString());
		sb.append("','");
		sb.append(addType.toString());
		sb.append("'");
		if("0".equals(addType.toString()) && otherParam!=null && !"".equals(otherParam.toString().trim())){
			for(String s:otherParam){
				sb.append(",'");
				sb.append(s);
				sb.append("'");
			}
		}
		sb.append(");");

		return sb.toString();
	}


	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中需要有隐藏的rid对象
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param params	附加参数容器
	 * @return	String
	 */
	public static String getSpParamsNoRefresh(String cId,String aId,KvMap<String,String> params){
		return getSpWithParams(cId,aId,"",Is_RefreshParent.NoRefresh,null,params);
	}

	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param recordId	数据主键id
	 * @param params	附加参数容器
	 * @return
	 */
	public static String getSpParamsNoRefresh(String cId,String aId,String recordId,KvMap<String,String> params){
		return getSpWithParams(cId,aId,"",Is_RefreshParent.NoRefresh,recordId,params);
	}

	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * 仅提交数据，且提交返回为脚本刷新<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param recordId	数据主键id
	 * @param pId       调用者容器ID
	 * @param params	附加参数容器
	 * @return
	 */
	public static String getSpParamsNoRefresh(String cId,String aId,String recordId,
			String pId,
			KvMap<String,String> params){
		return getSpWithParams(cId,aId,pId,Is_RefreshParent.NoRefresh,recordId,params);
	}

	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * 提交返回的内容将替换父容器内容(即:返回的是父容器的完整html)<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param pId		父容器ID(前一个页面的提交容器ID)
	 * @param params	附加参数容器
	 * @return	String
	 */
	public static String getSpParams(String cId,String aId,String pId,KvMap<String,String> params){
		return getSpWithParams(cId,aId,pId,Is_RefreshParent.Refresh,null,params);
	}

	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * 提交返回的内容将替换父容器内容(即:返回的是父容器的完整html)<BR>
	 * 提交容器中不需要隐藏的rid对象,通过脚本附加参数提交recordID
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param pId		父容器ID(前一个页面的提交容器ID)
	 * @param recordId	数据主键id
	 * @param params	附加参数,每个字符串是一个键值对,逗号分隔：如：rid,1001
	 * @return	String
	 */
	public static String getSpParams(String cId,String aId,String pId,String recordId,KvMap<String,String> params){
		return getSpWithParams(cId,aId,pId,Is_RefreshParent.Refresh,recordId,params);
	}

	/**
	 * 提交附加参数容器的SP(KvMap)<BR>
	 * @param cId		数据提交的容器id
	 * @param aId		提交到的ActionID
	 * @param pId		父容器ID(前一个页面的提交容器ID)
	 * @param isRefresh	返回刷新方式 Refresh:完整刷新/NoRefresh:脚本刷新
	 * @param recordId	数据主键id
	 * @param params	附加参数,每个字符串是一个键值对,逗号分隔：如：rid,1001
	 * @return	String
	 */
	private static String getSpWithParams(String cId,String aId,String pId,Is_RefreshParent isRefresh,String recordId,KvMap<String,String> params){
		StringBuilder sb = new StringBuilder();
		sb.append("sp('");
		sb.append(cId);
		sb.append("','");
		sb.append(aId);
		sb.append("','");
		sb.append(pId);
		sb.append("','");
		sb.append(isRefresh.toString());
		sb.append("','0'");
		if(recordId!=null){
			sb.append(",'");
			sb.append(rIdName);
			sb.append(',');
			sb.append(recordId);
			sb.append("'");
		}
		for(Map.Entry<String, String> ite:params){
			sb.append(",'");
			sb.append(ite.getKey());
			sb.append(',');
			sb.append(ite.getValue());
			sb.append("'");
		}
		sb.append(");");
		return sb.toString();
	}




	/*******************同步自刷新a脚本提交*******************/	

	/**
	 * 同步自刷新，不指定记录ID
	 * 提交容器中需要有隐藏的rid对象
	 * @param sCID      容器ID
	 * @param sActID    ActID
	 * @return 同步自刷新脚本
	 */
	public static String getA(String sCID,String sActID){
		return getA(sCID, sActID,null);
	}

	/**
	 * 同步自刷新，指定记录ID
	 * 提交容器中不需要隐藏的rid对象
	 * @param sCID      容器ID
	 * @param sActID    ActID
	 * @param sRowID    行数据主键ID
	 * @return 同步自刷新脚本
	 */
	public static String getA(String sCID,String sActID,String sRowID){
		StringBuilder sp = new StringBuilder();
		sp.append(" if ($('");
		sp.append(sCID);
		sp.append("')) {");
		sp.append("a('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append("1");
		if(sRowID!=null){
			sp.append("','");
			sp.append(sRowID);
		}
		sp.append("');");
		sp.append("};");
		return sp.toString();
	}

	/**
	 * 带数据提交的同步自刷新，指定记录ID
	 * @param sCID      	容器ID
	 * @param sActID    	ActID
	 * @param sRowID    	行数据主键ID
	 * @param submitType  	提交数据类型	
	 * @return 同步自刷新脚本
	 */
	public static String getA(String sCID,String sActID,String sRowID,Submit_Type submitType){
		StringBuilder sp = new StringBuilder();
		sp.append(" if ($('");
		sp.append(sCID);
		sp.append("')) {");
		sp.append("a('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(submitType.toString());
		sp.append("','");
		sp.append(sRowID);
		sp.append("');");
		sp.append("};");
		return sp.toString();
	}



	/*******************菜单点击m脚本提交*******************/		
	/**
	 * 伪同步刷新目标区域
	 * @param sCID 		提交容器ID
	 * @param sActID  	提交actionId
	 * @param sRowID  	数据主键ID
	 * @param tid  		目标容器id
	 * @return String
	 */
	public static String getM(String sCID,String sActID,String sRowID,String tid){
		return getM(sCID,sActID,sRowID,tid,null);
	}

	/**
	 * 伪同步刷新目标区域
	 * @param sCID 		提交容器ID
	 * @param sActID  	提交actionId
	 * @param sRowID  	数据主键ID
	 * @param tid  		目标容器id
	 * @param otherContainerId 附加提交容器ID
	 * @return String
	 */
	public static String getM(String sCID,String sActID,String sRowID,String tid,
			String otherContainerId){
		StringBuilder sp = new StringBuilder();
		sp.append("m('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sRowID);
		sp.append("','");
		sp.append(tid);
		if(otherContainerId!=null){
			sp.append("','");
			sp.append(otherContainerId);
		}
		sp.append("');");
		return sp.toString();
	}

	/**
	 * 同步刷新目标区域
	 * @param sCID 		提交容器ID
	 * @param sActID  	提交actionId
	 * @param sRowID  	数据主键ID
	 * @param tid  		目标容器id
	 * @return	String
	 */
	public static String getMs(String sCID,String sActID,String sRowID,String tid){
		return getMs(sCID,sActID,sRowID,tid,null);	
	}	

	/**
	 * 同步刷新目标区域
	 * @param sCID 		提交容器ID
	 * @param sActID  	提交actionId
	 * @param sRowID  	数据主键ID
	 * @param tid  		目标容器id
	 * @return	String
	 */
	public static String getMs(String sCID,String sActID,String sRowID,String tid,
			String otherContainerId){
		StringBuilder sp = new StringBuilder();
		sp.append("ms('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sRowID);
		sp.append("','");
		sp.append(tid);
		if(otherContainerId!=null){
			sp.append("','");
			sp.append(otherContainerId);
		}
		sp.append("');");
		return sp.toString();
	}	

	/**
	 * 异步刷新目标区域
	 * @param sCID 		容器ID
	 * @param sActID    ActID
	 * @param sTid		目标容器ID
	 * @return	String
	 */
	public static String getMa(String sCID,String sActID,String sTid){
		StringBuilder sp = new StringBuilder();
		sp.append("ma('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("','");
		sp.append(sTid);
		sp.append("');");
		return sp.toString();
	}


	/*******************异步自刷新r脚本提交*******************/	
	/**
	 * 刷新自己
	 * @param sCID 容器ID
	 * @param sActID    ActID
	 * @return 自刷新脚本
	 */
	public static String getR(String sCID,String sActID){
		StringBuilder sp = new StringBuilder();
		sp.append("r('");
		sp.append(sCID);
		sp.append("','");
		sp.append(sActID);
		sp.append("');");
		return sp.toString();
	}


	/*******************持久化刷新pr脚本提交*******************/	
	/**
	 * 持久化刷新父页面
	 * @param sCID 容器id
	 * @param rid  主键id
	 * @param flag 是否提交数据
	 * @return String
	 */
	public static String getPa(String sCID,String rid,Is_SubMitData flag){
		StringBuilder sp = new StringBuilder();
		sp.append("pa('");
		sp.append(sCID);
		sp.append("','");
		sp.append(rid);
		sp.append("','");
		sp.append(flag.toString());
		sp.append("');");

		return sp.toString();
	}


	/**
	 * Sp变参转换为KvMap
	 * @param list
	 * @return Sp附加参数
	 * @throws ErrorMessage
	 */
	public static KvMap<String, String> OtherParamsToKvMap(String[] otherParams) throws ErrorMessage{
		KvMap<String, String> params= new KvMap<String, String>();
		if(otherParams==null ||otherParams.length<1)return params;//如果为空返回空键值对
		String[] s;
		for(String ite:otherParams){
			if(ite==null) continue;
			s = ite.split(",");
			if(s.length<2) throw new ErrorMessage("OtherParam is unformat("+ite+")");
			params.put(s[0],s[1]);
		}
		return params;
	}



}
